package com.xbongbong.pay.platform.wechatpay.pojo.response.h5;

import com.alibaba.fastjson.annotation.JSONField;
import com.xbongbong.pay.platform.wechatpay.pojo.response.WeChatBaseResponse;
import lombok.Getter;
import lombok.Setter;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

/**
 *
 * @author 魏荣杰
 * @date 2021/1/8 13:55
 * @since
 * @version
 */
@Setter
@Getter
public class WeChatH5RefundNoticeReqInfo extends WeChatBaseResponse {
    private static final long serialVersionUID = 1249864329429624620L;

    /**
     * 微信支付订单号
     * 示例值：1217752501201407033233368018
     */
    @NotBlank
    @Size(min = 1, max = 32)
    @JSONField(name = "transaction_id")
    private String transactionId;
    /**
     * 商户系统内部订单号，要求32个字符内，只能是数字、大小写字母_-|*@ ，且在同一个商户号下唯一。
     * 示例值：1217752501201407033233368018
     */
    @NotBlank
    @Size(min = 1, max = 32)
    @JSONField(name = "out_trade_no")
    private String outTradeNo;

    /**
     * 微信退款单号
     * 示例值：1217752501201407033233368018
     */
    @NotBlank
    @Size(min = 1, max = 32)
    @JSONField(name = "refund_id")
    private String refundId;
    /**
     * 订单总金额，单位为分
     * 示例值：100
     */
    @NotNull
    @JSONField(name = "total_fee")
    private Integer totalFee;
    /**
     * 当订单使用了免充值型优惠券后返回该参数，应结订单金额=订单金额-免充值优惠券金额。
     * 示例值：100
     */
    @JSONField(name = "settlement_total_fee")
    private Integer settlementTotalFee;
    /**
     * 退款总金额,单位为分
     * 示例值：100
     */
    @NotNull
    @JSONField(name = "refund_fee")
    private Integer refundFee;

    /**
     * 去掉非充值代金券退款金额后的退款金额，退款金额=申请退款金额-非充值代金券退款金额，退款金额<=申请退款金额
     * 示例值：100
     */
    @JSONField(name = "settlement_refund_fee")
    private Integer settlementRefundFee;

    /**
     * 退款状态：
     * SUCCESS：退款成功
     * REFUNDCLOSE：退款关闭。
     * CHANGE：退款异常，退款到银行发现用户的卡作废或者冻结了，导致原路退款银行卡失败，可前往商户平台（pay.weixin.qq.com）-交易中心，手动处理此笔退款。
     * 示例值：SUCCESS
     */
    @NotNull
    @Size(min = 1, max = 16)
    @JSONField(name = "refund_status")
    private String refundStatus;

    /**
     * 取当前退款单的退款入账方
     * 1）退回银行卡：
     * {银行名称}{卡类型}{卡尾号}
     * 2）退回支付用户零钱:
     * 支付用户零钱
     * 3）退还商户:
     * 商户基本账户
     * 商户结算银行账户
     * 4）退回支付用户零钱通:
     * 支付用户零钱通
     * 示例值：招商银行信用卡0403
     */
    @NotNull
    @Size(min = 1, max = 64)
    @JSONField(name = "refund_recv_accout")
    private String refundRecvAccout;
    /**
     * 退款成功时间，当退款状态为退款成功时有返回。
     * 示例值：2016-07-25 15:26:26
     */
    @Size(min = 1, max = 20)
    @JSONField(name = "refund_success_time")
    private String refundSuccessTime;
    /**
     * REFUND_SOURCE_RECHARGE_FUNDS：可用余额退款/基本账户
     * REFUND_SOURCE_UNSETTLED_FUNDS：未结算资金退款
     * 示例值：REFUND_SOURCE_RECHARGE_FUNDS
     */
    @NotNull
    @Size(min = 1, max = 30)
    @JSONField(name = "refund_account")
    private String refundAccount;
    /**
     * API：接口
     * VENDOR_PLATFORM：商户平台
     * 示例值：API
     */
    @NotNull
    @Size(min = 1, max = 30)
    @JSONField(name = "refund_request_source")
    private String refundRequestSource;
}
